"""
需求:
● 客户端发起POST请求，传递 Json 数据，数据包含：
    {
        "username": "zhangsan",
        "password"： 123456,
        "remember"： True
    }

● 后端视图中 /login 接收用户的请求
    ○ 如果用户名和密码成功，表示登录成功，重定向到 /userinfo 在此页面中显示：欢迎回来： zhangsan
    ○ 如果用户名或者密码错误，登录失败
● 登录成功，判断 remember 是否为 True，如果为True，实现状态保持，并设置过期时间为 3天，否则当用户关闭浏览器之后就结束会话
"""
from flask import Flask, request, redirect, url_for, session
from datetime import timedelta

app = Flask(__name__)

# 设置应用秘钥  用于对cookie中的sessionid进行加密
app.secret_key = "1sbwMr9SvmBCUUjHham/AQjWdZtEGPSARrNdclihFb1NrOpAT1LlQA=="
# 设置session的过期时间
app.permanent_session_lifetime = timedelta(days=3)


# 首页
@app.route('/')
def index():
    # 取出session中的数据
    username = session.get('username')
    # 判断是否登录
    if username:
        # 已登录
        return "欢迎回来, {}".format(username)
    else:
        # 没有登录,显示"首页"
        return "首页"


@app.route('/login', methods=['POST', 'GET'])
def login():
    # 判断 本次的请求方式
    if request.method == 'GET':
        with open('login.html', 'r') as f:
            html_str = f.read()
            return html_str

    # post提交数据
    username = request.form.get('username')
    password = request.form.get('password')
    if username == "zhangsan" and password == '123456':
        # 允许session设置过期时间  默认不允许   如果允许, 默认过期时间为31天
        session.permanent = True

        # 登录成功, 使用session记录用户的数据  类字典对象
        session["username"] = username

        # 登录成功,重定向到首页
        return redirect(url_for("index"))
    else:
        return "登录失败"


if __name__ == '__main__':
    app.run(debug=True)
